<?php
/**
 * 権限用コントローラー
 *
 * @author tanaka
 * @package Back_Controller
 * @subpackage AuthAbstract
 */
abstract class Controller_Action_FrontAuth extends Controller_Action_Front
{
	/**
	 * @var Container_UserFront 
	 */
	protected $_loginUser;
	
	/**
	 * (non-PHPdoc)
	 * @see Controller_Action_Front::init()
	 */
	public function init()
	{
		parent::init();
		
		$userSession = new Zend_Session_Namespace(parent::SESSION_NAMESPACE_USER);
		$user_id = $userSession->user_id;
		
		if (!ctype_digit("{$user_id}")) {
			return $this->_throw403Error('認証されていない、もしくはセッションタイムアウト');
		}
		
		$sessionConfig = App::getInstance()->session->toArray();
		if(isset($sessionConfig['cookie_lifetime']) && (time() - $userSession->LAST_ACCESS) > $sessionConfig['cookie_lifetime']){
			return $this->_throw403Error('セッションタイムアウト');
		}
		
		$userSession->LAST_ACCESS = time();
		
		//ユーザー情報の取得
		$dbUser = new Db_Table_TUser();
		$this->_loginUser = $dbUser->getUserContainerByID($user_id);
		
		if(!$this->_loginUser instanceof Container_UserFront){
			return $this->_throw403Error('認証に失敗しました。');
		}
		
		// ログイン時のセッションIDと別のIDだった場合破棄
		if(Zend_Session::getId() != $this->_loginUser->getLastLoginSessid()){
			return $this->_throw403Error('セッションIDが変更された。', '認証に失敗しました。別のPCからログインが行われた可能性があります。');
		}
		
	}
	
	/**
	 * (non-PHPdoc)
	 * @see Controller_Action_Front::postDispatch()
	 */
	public function postDispatch()
	{
		parent::postDispatch();
		
		$this->view->loginUser = $this->_loginUser;
	}
}
